<%--

    Страница "Товары"

    Отображает перечень товаров и пользволяет создавать, редактировать и удялать товары.
    Использует разбиение на страницы на уровне БД.

    Использует бины:
    + GoodsBean

--%>

<%@page contentType="text/html" pageEncoding="UTF-8" %>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@taglib prefix="a4j" uri="http://richfaces.org/a4j" %>
<%@taglib prefix="rich" uri="http://richfaces.org/rich" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Goodwill - Товары</title>
    <link rel="stylesheet" href="resources/css/main.css"/>
    <link rel="stylesheet" href="resources/css/stylesheet.css"/>
    <script type="text/javascript" src="resources/js/prototype.js"></script>
    <script type="text/javascript" src="resources/js/goodwill.js"></script>
    <script type="text/javascript">

        function selectGood(goodId)
        {
            _selectGood(goodId);
        }

        function editGood(goodId)
        {
            _editGood(goodId);
        }

        function removeGood(goodId, goodName)
        {
            $('removeGoodsPanelForm:removeGoodsPanel_goodId').value = goodId;
            $('removeGoodsPanelForm:removeGoodsPanel_goodName').innerHTML = goodName;
            Richfaces.showModalPanel('removeGoodsPanel');
        }

        function unremoveGood(goodId, goodName)
        {
            $('unremoveGoodsPanelForm:unremoveGoodsPanel_goodId').value = goodId;
            $('unremoveGoodsPanelForm:unremoveGoodsPanel_goodName').innerHTML = goodName;
            Richfaces.showModalPanel('unremoveGoodsPanel');
        }

        function btnAddNewGood_onClick()
        {

        }
    </script>
    <style type="text/css"></style>
</head>

<body>
<f:view>
<jsp:include page="menu.jsp"/>
<jsp:include page="status.jsp"/>

<a4j:form id="jsForm" prependId="false">
    <a4j:jsFunction name="_selectGood" action="#{SessionBean.addSelectedGood}" ajaxSingle="true" reRender="divGoodsActions" status="">
        <a4j:actionparam name="goodId" assignTo="#{SessionBean.longId}"/>
    </a4j:jsFunction>

    <a4j:jsFunction name="_editGood" ajaxSingle="true" oncomplete="updateAddGoodsPanel();">
        <a4j:actionparam name="goodId" assignTo="#{SessionBean.editableGoodId}"/>
    </a4j:jsFunction>

    <a4j:jsFunction name="updateView" ajaxSingle="true" reRender="tblGoods,pager"/>

    <a4j:jsFunction name="updateAddGoodsPanel" ajaxSingle="true" reRender="addGoodsPanel" oncomplete="Richfaces.showModalPanel('addGoodsPanel')"/>
</a4j:form>

<h:form id="goodsForm" prependId="false" style="padding-top:3px">

    <h:panelGroup id="pager">

        <h:outputText value="Страницы (<b>#{GoodsBean.pagesCount}</b>)" escape="false" style="margin-right:5px"/>

        <a4j:commandLink action="#{GoodsBean.toBegin}" value="[<<" reRender="tblGoods,pager" styleClass="pager_arr"/>
        <a4j:commandLink action="#{GoodsBean.longPrevPage}" value="<<" reRender="tblGoods,pager" styleClass="pager_arr"/>
        <a4j:commandLink action="#{GoodsBean.prevPage}" value="<" reRender="tblGoods,pager" styleClass="pager_arr"/>

        <h:panelGroup id="pager_nums">
            <a4j:repeat value="#{GoodsBean.pageIndexes}" var="pageIndex">
                <a4j:commandLink id="test" action="#{GoodsBean.applyPage}" value="#{pageIndex.num}" styleClass="pager_page" reRender="tblGoods,pager">
                    <a4j:actionparam name="page_id" assignTo="#{GoodsBean.page}" value="#{pageIndex.num}"/>
                </a4j:commandLink>
            </a4j:repeat>
        </h:panelGroup>

        <a4j:commandLink action="#{GoodsBean.nextPage}" value=">" reRender="tblGoods,pager" styleClass="pager_arr"/>
        <a4j:commandLink action="#{GoodsBean.longNextPage}" value=">>" reRender="tblGoods,pager" styleClass="pager_arr"/>
        <a4j:commandLink action="#{GoodsBean.toEnd}" value=">>]" reRender="tblGoods,pager" styleClass="pager_arr"/>
    </h:panelGroup>
    <!-- ---------- -->

    <rich:spacer width="10"/>

    <!-- Фильтр -->
    <h:outputText value="Фильтр: " styleClass="b"/>
    <h:panelGroup layout="block" styleClass="filter_subpanel">
        <h:outputText value="Код"/>
        <h:inputText value="#{SessionBean.goodsFilter.code}" styleClass="f_tb_s"/>
    </h:panelGroup>
    <h:panelGroup layout="block" styleClass="filter_subpanel">
        <h:outputText value="Наименование"/>
        <h:inputText value="#{SessionBean.goodsFilter.name}" styleClass="f_tb_l"/>
    </h:panelGroup>
    <h:panelGroup layout="block" styleClass="filter_subpanel">
        <h:outputText value="Группа товара"/>
        <h:selectOneMenu value="#{SessionBean.goodsFilter.goodTypeId}" styleClass="f_s">
            <f:selectItems value="#{GoodTypesBean.goodTypesAsSelectItems}"/>
        </h:selectOneMenu>
    </h:panelGroup>
    <a4j:commandButton reRender="tblGoods,pager" value="Применить" action="#{GoodsBean.applyFilter}"/>
    <!-- ------ -->

    <h:panelGroup id="divGoodsActions" rendered="#{SecurityBean.isRoleAdministrator}" styleClass="" layout="block" style="background:whitesmoke;padding-top:7px;padding-bottom:7px">
        <h:panelGroup layout="block" styleClass="filter_subpanel">
            <h:outputText value="Выбрано товаров: " styleClass="b"/>
            <h:outputText value="#{GoodsBean.selectedGoodsCount}"/>
        </h:panelGroup>
        <h:panelGroup layout="block" styleClass="filter_subpanel">
            <h:outputText value="Действия: " styleClass="b"/>
            <h:outputLink value="#" onclick="Richfaces.showModalPanel('moveGoodsPanel');">Переместить</h:outputLink>
        </h:panelGroup>
    </h:panelGroup>

    <rich:dataTable id="tblGoods" value="#{GoodsBean.goods}" var="good" styleClass="full"
                    columnClasses="goods_c0,goods_c1,goods_c2,goods_c3,goods_c4,goods_c5,goods_c6,goods_c7,goods_c8,goods_c9,goods_c10,goods_c11,goods_c12">
        <f:facet name="header">
            <h:panelGroup>
                <h:outputText value="Товары" styleClass="table_caption"/>
                <rich:spacer width="10"/>
                <h:commandButton onclick="editGood('-1');return false;"
                           value="Создать новый товар..."
                           rendered="#{SecurityBean.isRoleAdministrator}"
                           title="Добавить товар в каталог товаров"/>
            </h:panelGroup>
        </f:facet>
        <rich:column rendered="#{SecurityBean.isRoleAdministrator}">

            <!-- Операции с товарами --------------------------------------------------------------------------------------------------->

            <h:selectBooleanCheckbox value="#{good.selected}" onclick="selectGood('#{good.id}')"/>

            <!-- Редактировать товар -->
            <h:outputLink value="#editgood"
                          onclick="editGood('#{good.id}')"
                          title="Редактировать товар">
                <h:graphicImage value="/resources/img/edit.gif"/>
            </h:outputLink>
            
            <!-- Удалить товар -->
            <h:panelGroup rendered="#{!good.deleted}">
                <h:outputLink value="#removegood"
                              onclick="removeGood('#{good.id}', '#{good.name}')"
                              title="Удалить товар из прейскуранта">
                    <h:graphicImage value="/resources/img/delete.gif"/>
                              </h:outputLink>
            </h:panelGroup>

            <!-- Восстановить товар -->
            <h:panelGroup rendered="#{good.deleted}">
                <h:outputLink value="#unremovegood"
                               onclick="unremoveGood('#{good.id}', '#{good.name}')"
                               title="Восстановить товар в прейскурант">
                    <h:graphicImage value="/resources/img/good_green_16.png"/>
                               </h:outputLink>
            </h:panelGroup>

            <!-- ---------------------------------------------------------------------------------------------------------------------->

        </rich:column>

        <rich:column>
            <f:facet name="header">
                <h:outputText value="Код"/>
            </f:facet>
            <h:outputText value="#{good.code}" rendered="#{!good.deleted}"/>
            <h:outputText value="#{good.code}" rendered="#{good.deleted}" style="color:dimgray;"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Код в 1С"/>
            </f:facet>
            <h:outputText value="#{good.c1code}" rendered="#{!good.c1CodeIsMissing}"/>
            <h:outputText value="не установлен" rendered="#{good.c1CodeIsMissing}" style="color:red;font-weight:bold;font-size:80%"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Наименование"/>
            </f:facet>
            <h:outputText value="#{good.name}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Брэнд"/>
            </f:facet>
            <h:outputText value="#{GoodsBean.brandsMap[good.brandId]}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputLink value="#" onclick="go('GoodTypesPage.jsf')" style="color:black">Группа товаров</h:outputLink>
            </f:facet>
            <h:outputText value="#{good.goodType.name}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="о.е."/>
            </f:facet>
            <h:outputLink value="#oe" onclick="showOesModalPanel('#{good.code}')">
                <h:outputText value="#{good.oeShort}" id="lOeShort"/>
            </h:outputLink>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Применимость"/>
            </f:facet>
            <h:outputText value="#{good.prShort}" id="lPrShort"/>
        </rich:column>
        <%--<rich:column>--%>
            <%--<f:facet name="header">--%>
                <%--<h:outputText value="Вес"/>--%>
            <%--</f:facet>--%>
            <%--<h:outputText value="#{good.weight}"/>--%>
        <%--</rich:column>--%>
        <%--<rich:column>--%>
            <%--<f:facet name="header">--%>
                <%--<h:outputText value="Объем"/>--%>
            <%--</f:facet>--%>
            <%--<h:outputText value="#{good.volume}"/>--%>
        <%--</rich:column>--%>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Шт. в коробке"/>
            </f:facet>
            <h:outputText value="#{good.packageCount}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Мин. цена"/>
            </f:facet>
            <h:outputText value="#{good.minPrice}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="На складе"/>
            </f:facet>
            <h:outputText value="#{good.count}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="В резерве"/>
            </f:facet>
            <h:outputText value="#{good.reservedCount}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Вес"/>
            </f:facet>
            <h:outputText value="#{good.weight}"/>
        </rich:column>
        <rich:column>
            <f:facet name="header">
                <h:outputText value="Объем"/>
            </f:facet>
            <h:outputText value="#{good.volume}"/>
        </rich:column>
    </rich:dataTable>
</h:form>

<rich:modalPanel id="addGoodsPanel" autosized="true" width="550">
    <f:facet name="header">
        <h:outputText value="Введите данные товаре"/>
    </f:facet>
    <f:facet name="controls">
        <h:graphicImage value="/resources/img/close.png" onclick="Richfaces.hideModalPanel('addGoodsPanel');"/>
    </f:facet>
    <h:form id="addGoodsPanelForm">
        <jsp:include page="messages.jsp"/>

        <h:inputHidden value="#{GoodsBean.good.count}"/>
        <h:inputHidden value="#{GoodsBean.good.deleted}"/>

        <h:panelGrid columns="2" styleClass="full" columnClasses="dleft,dright" cellspacing="0" cellpadding="0">

            <h:outputText value="Наименование"/>
            <h:inputText value="#{GoodsBean.good.name}" required="true"
                         requiredMessage="Поле Наименование должно быть заполнено"/>

            <h:outputText value="Код (уникальный)"/>
            <h:inputText value="#{GoodsBean.good.code}"
                         required="true"
                         requiredMessage="Поле Код должно быть заполнено"/>

            <h:outputText value="Код в 1С"/>
            <h:inputText value="#{GoodsBean.good.c1code}"/>

            <h:outputText value="Вес (кг, например: <b>1.54</b>)" escape="false"/>
            <h:inputText value="#{GoodsBean.good.weight}"
                         converterMessage="Вес должен быть числом"
                         required="true"
                         requiredMessage="Поле Вес должно быть заполнено"
                         validator="#{GoodsBean.validateWeight}"
                         validatorMessage="Вес должен быть положительным числом"
                         converter="VolumeConverter">
            </h:inputText>

            <h:outputText value="Объем (м3, например: <b>1.54</b>)" escape="false"/>
            <h:inputText value="#{GoodsBean.good.volume}"
                         converterMessage="Объем должен быть числом"
                         required="true"
                         requiredMessage="Поле Объем должно быть заполнено"
                         validator="#{GoodsBean.validateVolume}"
                         validatorMessage="Объем должен быть положительным числом"
                         converter="VolumeConverter">
            </h:inputText>


            <h:outputText value="M&H"/>
            <h:inputText value="#{GoodsBean.good.mh}"/>

            <h:outputText value="о.е."/>
            <h:inputText value="#{GoodsBean.good.oe}"/>

            <h:outputText value="Применимость"/>
            <h:inputText value="#{GoodsBean.good.pr}"/>

            <h:outputText value="Количество шт. в 1 коробке (групповая тара)"/>
            <h:inputText value="#{GoodsBean.good.packageCount}"
                         required="true"
                         requiredMessage="В количестве штук в одной коробке должна быть указана хотя бы единица"/>
            <h:outputText value="Мин. цена"/>
            <h:inputText value="#{GoodsBean.good.minPrice}"
                         converterMessage="Количество должно быть числом"
                         required="true"
                         requiredMessage="Количество должно быть заполнено"
                         validator="#{GoodsBean.validatePriceCount}"
                         validatorMessage="Мин. цена должна быть положительным числом"/>

            <h:outputText value="Группа товаров"/>
            <h:selectOneMenu value="#{GoodsBean.good.goodTypeId}">
                <f:selectItems value="#{GoodTypesBean.goodTypesAsSelectItems}"/>
            </h:selectOneMenu>

        </h:panelGrid>

        <h:panelGrid columns="2" styleClass="full" columnClasses="butLeft,butRight" cellspacing="0" cellpadding="0">
            <a4j:commandButton value="Сохранить"
                               action="#{GoodsBean.addGood}"
                               styleClass="btnsz"
                               oncomplete="if(#{!GoodsBean.hasFacesErrors}) {updateView(); Richfaces.hideModalPanel('addGoodsPanel');}">
            </a4j:commandButton>
            <h:commandButton value="Отменить"
                         styleClass="btnsz"
                         onclick="Richfaces.hideModalPanel('addGoodsPanel');return false;"/>
        </h:panelGrid>

    </h:form>
</rich:modalPanel>

<rich:modalPanel id="removeGoodsPanel" autosized="true" width="300">
    <f:facet name="header">
        <h:outputText value="Удаление товара"/>
    </f:facet>
    <f:facet name="controls">
        <h:graphicImage value="/resources/img/close.png" onclick="Richfaces.hideModalPanel('removeGoodsPanel')"/>
    </f:facet>

    <h:form id="removeGoodsPanelForm">
        <jsp:include page="messages.jsp"/>

        <h:inputHidden id="removeGoodsPanel_goodId" value="#{GoodsBean.goodId}"/>
        <h:outputText value="Удалить товар: "/>
        <h:outputText id="removeGoodsPanel_goodName"/>

        <h:panelGrid columns="2" styleClass="full" columnClasses="butLeft,butRight" cellspacing="0" cellpadding="0">
            <a4j:commandButton value="Да"
                               action="#{GoodsBean.removeGood}"
                               reRender="tblGoods"
                               styleClass="btnsz"
                               oncomplete="if(#{!GoodsBean.hasFacesErrors}) {updateView(); Richfaces.hideModalPanel('removeGoodsPanel');}"/>
            <h:commandButton value="Нет"
                             styleClass="btnsz"
                             onclick="Richfaces.hideModalPanel('removeGoodsPanel');return false;"/>
        </h:panelGrid>
    </h:form>
</rich:modalPanel>

<rich:modalPanel id="unremoveGoodsPanel" autosized="true" width="300">
    <f:facet name="header">
        <h:outputText value="Восстановление товара"/>
    </f:facet>
    <f:facet name="controls">
        <h:graphicImage value="/resources/img/close.png" onclick="Richfaces.hideModalPanel('unremoveGoodsPanel')"/>
    </f:facet>

    <h:form id="unremoveGoodsPanelForm">
        <jsp:include page="messages.jsp"/>

        <h:inputHidden id="unremoveGoodsPanel_goodId" value="#{GoodsBean.goodId}"/>
        <h:outputText value="Восстановить товар: "/>
        <h:outputText id="unremoveGoodsPanel_goodName"/>

        <h:panelGrid columns="2" styleClass="full" columnClasses="butLeft,butRight" cellspacing="0" cellpadding="0">
            <a4j:commandButton value="Да"
                               action="#{GoodsBean.unremoveGood}"
                               reRender="tblGoods"
                               styleClass="btnsz"
                               oncomplete="if(#{!GoodsBean.hasFacesErrors}) {updateView(); Richfaces.hideModalPanel('unremoveGoodsPanel');}"/>
            <h:commandButton value="Нет"
                             styleClass="btnsz"
                             onclick="Richfaces.hideModalPanel('unremoveGoodsPanel');return false;"/>
        </h:panelGrid>
    </h:form>
</rich:modalPanel>

<rich:modalPanel id="moveGoodsPanel" autosized="true" width="800">
    <f:facet name="header">
        <h:outputText value="Перемещение товаров"/>
    </f:facet>
    <f:facet name="controls">
        <h:graphicImage value="/resources/img/close.png" styleClass="hidelink" onclick="#{rich:component('moveGoodsPanel')}.hide();return false;"/>
    </f:facet>
    <%--<a4j:outputPanel ajaxRendered="true">--%>
        <h:form>

            <h:outputText value="В какую группу Вы хотите переместить выбранные товары?"/>

            <rich:panel>
                <a4j:repeat value="#{GoodTypesBean.goodTypes}" var="goodType">
                    <rich:spacer width="#{(goodType.level)*20}"/>
                    <h:graphicImage value="/resources/img/folder.gif" styleClass="gt_img"/>

                    <a4j:commandLink action="#{GoodsBean.moveGoods}"
                                     value="#{goodType.name}"
                                     oncomplete="if(#{!GoodsBean.hasFacesErrors}) #{rich:component('moveGoodsPanel')}.hide();"
                                     reRender="tblGoods"
                                     style="margin-left:10px">
                        <a4j:actionparam name="good_type_id" assignTo="#{GoodsBean.moveGoodTypeId}" value="#{goodType.id}"/>
                    </a4j:commandLink><br>

                </a4j:repeat>
            </rich:panel>

        </h:form>
    <%--</a4j:outputPanel>--%>
</rich:modalPanel>

    <jsp:include page="oes.jsp"/>
</f:view>
</body>
</html>
